
package taskmanager;

import Network.NetworkLogic;
import mpiserver.MpiListener;

/**
 * интерфейс планировщика задач
 * @author Aleksey ID=2001
 */
public interface ITaskManager {
    /**
     * Передать сетевой модуль планировщику
     * @param netLogic модуль сетевого взаимодействия
     */
    public void initNetwork(NetworkLogic netLogic);

    /**
     * Повторная отправка отложенных событий
     * @return true - отложенные события полностью отправлены, false - отправлены
     * не все события
     */
    public boolean sendWaitedEvents();

    /**
     * Определить наличие отложенных событий
     * @return true - есть отложенные события, false - нет отложенных событий
     */
    public boolean hasWaitedEvents();

    /**
     * Удалить ожидающие события
     */
    public void clearWaitedEvents();

    /**
     * Задать режим работы (автономный,арбитр,ведомый или не определено)
     * @param mode режим работы
     * @return true - успешное изменение режима, false - в системе еще есть заявки
     */
    public boolean setMode(int mode);

    /**
     * Запросить режим работы (автономный,арбитр,ведомый или не определено)
     * @param mode режим работы
     * @return режим работы
     */
    public int getMode();

    /**
     * Зпросить планировщик верхнего уровня
     * @return планировщик верхнего уровня
     */
    public IGlobalTaskManager getGlobalTM();

    /**
     * Запросить планировщик нижнего уровня
     * @return планировщик нижнего уровня
     */
    public ILocalTaskManager getLocalTM();

    /**
     * Запросить планировщик нижнего уровня ведомого сервера
     * @return планировщик нижнего уровня ведомого сервера
     */
    public ISlaveTaskManager getSlaveTM();

    /**
     * Добавить обработчик событий модуля mpi
     * @param listener обработчик события
     */
    public void addMpiListener(MpiListener listener);

//    /**
//     * Запросить количество задач в планировщике
//     * @return число задач в планировщике
//     */
//    public int getTaskCount();
//
//    /**
//     * Проверить наличие задач в планировщике
//     * @return true - здач нет, иначе false
//     */
//    public boolean isEmpty();
//
//    /**
//     * Установить максимальное количество активных задач для планировщика
//     * нижнего уровня
//     * @param max максимально количество активных задач
//     */
//    public void setMaxActiveCount(int max);
//
//    /**
//     * Запросить максимальное количество активных задач планировщика нижнего
//     * уровня
//     * @return максимально количество активных задач
//     */
//    public int getMaxActiveCount();
//
//    /**
//     * Добавить задачу в планировщик
//     * @param task задача, не null !
//     * @return true - задача добавлена, false - задача с указанным id уже есть
//     */
//    public boolean addTask(JTask task);
//
//    /**
//     * Удалить задачу из планировщика
//     * Процессы связанные с задачей уничтожаются
//     * @param taskID идентификатор задачи
//     * @return true - задача удалена, false - задачи нет
//     */
//    public boolean removeTask(long taskID);
//
//    /**
//     * Остановить выполнение задачи
//     * @param taskID идентификатор задачи
//     * @return true - задача остановлена, false - задачи нет
//     */
//    public boolean stopTask(long taskID);
//
//    /**
//     * Проверить наличие задачи
//     * @param taskID идентификатор задачи
//     * @return true - задача присутствует, false иначе
//     */
//    public boolean containsTask(long taskID);
//
//    /**
//     * Запросить количество активных задач для планировщика
//     * нижнего уровня
//     * @return количество активных задач
//     */
//    public int getActiveCount();
//
//    /**
//     * Запросить задачу
//     * @param taskID идентификатор задачи
//     * @return задача или null в случае отсутствия
//     */
//    public JTask getTask(long taskID);
//
//    /**
//     * Запросить идентификаторы задач в планировщике
//     * Если планировщик находится в режиме арбитра будут возвращены все задачи
//     * системы, иначе задачи текущего сервера
//     * @return массив идентификаторов задач
//     */
//    public long[] getAllTasks();
}
